package concoursbelote;

import java.util.Scanner;

/**
 * 
 * @author Guillaume
 *
 */
public class Barman extends Humains 
{

	
	//*********************************************************
	//			CONSTRUCTEURS
	//*********************************************************
	/**
	 * Transforme un Humains en Barman
	 * @author Guillaume
	 * @param prenom
	 * @param surnom
	 * @param porteMonnaie
	 * @param coteDePopularite
	 * @param criSignificatif
	 */
	public Barman(String prenom, String surnom, double porteMonnaie, double coteDePopularite, String criSignificatif) 
	{
		super(prenom, surnom, porteMonnaie, coteDePopularite, criSignificatif);
	}
	
	
	//*********************************************************
	//			METHODS
	//*********************************************************
	/**
	 * Permet de faire payer le barman
	 * @author Shehu
	 * @param prixTotal
	 */
	public void payer(double prixTotal)
	{
		Administration.currentBar.getBarman().setPorteMonnaie(Administration.currentBar.getBarman().getPorteMonnaie() - prixTotal);
	}
	
	@Override
	/**
	 * Propose d'offrir un verre au client ayant une cote de popularité supérieur à 50 ou à la patronne et aux serveurs
	 * @author Shehu
	 */
	public void offrirUnVerre()
	{
		System.out.println("<" + Administration.currentBar.getBarman().getPrenom() + "> Vous prenez un verre?");
	}
	
	public void refuserUnVerre(int index)
	{
	}
	
	/**
	 * Permet de gérer les stocks. Retire une bouteille des stocks lorsque une bouteille vient de se terminer
	 * @author Guillaume
	 * @param indexBar
	 * @param indexBoisson
	 */
	public void accesAuxStocks(int indexBoisson)
	{
		Administration.currentBar.mesBoissons.get(indexBoisson).setStocks(Administration.currentBar.mesBoissons.get(indexBoisson).getStocks() - 1);
		Administration.currentBar.mesBoissons.get(indexBoisson).setNbrVerresRestants(Administration.currentBar.mesBoissons.get(indexBoisson).getNbrVerres1Bouteille());
	}
	
	/**
	 * Permet au barman de remplir les stocks avec la commande reçu
	 * @author Guillaume
	 * @param quantite
	 * @param indexBoisson
	 */
	public void remplirLesStocks(int quantite, int indexBoisson)
	{
		Administration.currentBar.mesBoissons.get(indexBoisson).setStocks(quantite);
	}
	
	/**
	 * Permet de gérer la caisse: encaissement des clients et donner de l'argent à la patronne
	 * @author Shehu
	 * @param prixTotal
	 */
	public void gestionDeLaCaisse(double prixTotal)
	{
		Administration.currentBar.setCaisse(Main.repertoireBar.get(Main.indexBar).getCaisse() + prixTotal);
	}
	
	/**
	 * Permet au barman de donner de l'argent à la patronne lorsque la caisse du bar dépasse 1000€
	 * @author Guillaume
	 */
	public void donnerDeLargent() 
	{
		if(Administration.currentBar.getCaisse() > 1000)
		{
			System.out.println("<" + Administration.currentBar.getBarman().getPrenom() + "> " + Administration.currentBar.getPatronne().getPrenom() + ", voici la caisse d'aujourd'hui.");
			Administration.currentBar.getPatronne().setPorteMonnaie(Administration.currentBar.getPatronne().getPorteMonnaie() + Administration.currentBar.getCaisse());
			Administration.currentBar.setCaisse(0);
		}
	}
	
	/**
	 * Sert un verre au client suivant leur demande et permet de gérer le nombre de verre restant dans une bouteille.
	 * Si la bouteille est vide permet d'accéder à la gestion des stocks.
	 * @author Guillaume
	 * @param indexBar
	 * @param index_boisson
	 */
	public void servirUnVerre(int index_boisson)
	{
		Administration.currentBar.mesBoissons.get(index_boisson).setNbrVerresRestants(Administration.currentBar.mesBoissons.get(index_boisson).getNbrVerresRestants() - 1);
		
		if(Administration.currentBar.mesBoissons.get(index_boisson).getNbrVerresRestants() == 0)
		{
			accesAuxStocks(index_boisson);
		}
	}

	@Override
	/**
	 * Surchage de la méthode boire de la classe Humain. Cette méthode est spécifique au barman
	 * @author Guillaume
	 */
	public void boire() 
	{
		System.out.println("Gloups!");
	}
	
	
	/**
	 * Commande la boisson manquante au fournisseur
	 * @author Guillaume
	 * @param indexBoisson
	 */
	public void commander(int indexBoisson)
	{
		@SuppressWarnings("unused")
		int quantite;
		System.out.println("Combien souhaitez-vous commander de " + Administration.currentBar.mesBoissons.get(indexBoisson).getNomBoisson());
		Scanner in = new Scanner(System.in);	
		Fournisseur.recevoirCommande(quantite = in.nextInt(), indexBoisson);
	}
	
	/**
	 * Permet au barman d'offrir une tournée générale
	 * @author Guillaume
	 */
	public void offrirUneTournee() 
	{
		Integer boissonPatronne = new Integer(Administration.rechercheBoissonPatronne());
		Integer eau = new Integer(Administration.rechercheIndexEau());
		Integer boissonSansAlcool = new Integer(Administration.selectionBoissonSansAlcool());
		double prixTotal=0;
		System.out.println("<" + Administration.currentBar.getBarman().getPrenom() + "> J'OFFRE LA TOURNEE GENERALE!!!   Que voulez-vous???");
		for (int i = 0; i<Administration.currentBar.clients.size(); i++)
		{
			for( int j=0; j<Administration.currentBar.mesBoissons.size(); j++)
			{
				if(Administration.currentBar.mesBoissons.get(j).getNomBoisson().equalsIgnoreCase(Administration.currentBar.clients.get(i).getBoissonFavorite()))
				{
					if(Administration.currentBar.mesBoissons.get(j).getStocks() == 0)
					{
						j = Administration.currentBar.clients.get(i).changerBoisson(i);
					}
					Administration.currentBar.clients.get(i).commander(j, i);
					Administration.currentBar.getBarman().servirUnVerre(j);
					prixTotal += Administration.currentBar.mesBoissons.get(j).getPrixVenteVerre();
					Administration.currentBar.clients.get(i).boire(j);
					break;
				}
			}
		}
		Administration.currentBar.getBarman().servirUnVerre(boissonPatronne);
		prixTotal += Administration.currentBar.mesBoissons.get(boissonPatronne).getPrixVenteVerre();
		Administration.currentBar.getPatronne().boire(boissonPatronne);
		
		for (int i =0; i<Administration.currentBar.serveur.size(); i++)
		{
			Administration.currentBar.getBarman().servirUnVerre(eau);
			prixTotal += Administration.currentBar.mesBoissons.get(eau).getPrixVenteVerre();
			Administration.currentBar.serveur.get(i).boireDeLeau();
			Administration.currentBar.serveur.get(i).setCoteDePopularite(Administration.currentBar.serveur.get(i).getCoteDePopularite() + 1);
		}
		Administration.currentBar.getBarman().servirUnVerre(boissonSansAlcool);
		prixTotal += Administration.currentBar.mesBoissons.get(boissonSansAlcool).getPrixVenteVerre();
		Administration.currentBar.getBarman().boire();
		
		Administration.currentBar.getBarman().setCoteDePopularite(Administration.currentBar.getBarman().getCoteDePopularite() + 1);
		Administration.currentBar.getBarman().payer(prixTotal);
		Administration.currentBar.getBarman().gestionDeLaCaisse(prixTotal);
	}


	@Override
	public void offrirUneTournee(int indexClient) {
		// TODO Auto-generated method stub
		
	}

}
